home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / dev / e / capus2.lha / capus2 / CxXref / Sources / CxXref.e next >
Encoding:
Text File  |  1995-03-27  |  27.9 KB  |  803 lines

  1. /*=========================================================================================*/
  2. /* Source code generate by Gui2E v0.1 © 1994 NasGûl                                        */
  3. /*=========================================================================================*/
  4. /*======<<< Peps Header >>>======
  5.  PRGVERSION '0'
  6.  ================================
  7.  PRGREVISION '2'
  8.  ================================
  9.  AUTHOR      'NasGûl'
  10.  ===============================*/
  11. /*======<<<   History   >>>======
  12.  ===============================*/
  13. OPT OSVERSION=37
  14. CONST DEBUG=FALSE
  15. /*"Modules/Erreurs"*/
  16. MODULE 'intuition/intuition','gadtools','libraries/gadtools','intuition/gadgetclass','intuition/screens',
  17.        'graphics/text','exec/lists','exec/nodes','exec/ports','eropenlib','utility/tagitem',
  18.        'intuition/intuitionbase'
  19. MODULE 'amigaguide','libraries/amigaguide'
  20. MODULE 'reqtools','libraries/reqtools'
  21. MODULE 'icon','workbench/workbench','workbench/startup','mheader'
  22. MODULE 'commodities','libraries/commodities'
  23. ENUM ER_NONE,ER_LOCKSCREEN,ER_VISUAL,ER_CONTEXT,ER_MENUS,ER_GADGET,ER_WINDOW,
  24.      ER_LOCKAG,ER_HANDLEAG,ER_NEWAG,ER_BADARGS,ER_NOICON,ER_PORT,ER_CX
  25. /**/
  26. /*"Globals Definitions"*/
  27. DEF screen:PTR TO screen,
  28.     visual=NIL,
  29.     tattr:PTR TO textattr,
  30.     reelquit=FALSE,
  31.     offy,offx
  32. /*=======================================
  33.  = xref Definitions
  34.  =======================================*/
  35. DEF xref_window=NIL:PTR TO window
  36. DEF xref_glist=NIL
  37. /*==================*/
  38. /*     Gadgets      */
  39. /*==================*/
  40. CONST GA_G_XREFLIST=0
  41. CONST GA_G_LOADXREF=1
  42. CONST GA_G_EXPUNGEXREF=2
  43. CONST GA_G_FONCTIONLIST=3
  44. CONST GA_G_FILE=4
  45. CONST GA_G_VIEWGUIDE=5
  46. CONST GA_G_VIEWREMEMBER=6
  47. CONST GA_G_REMEMBER=7
  48. CONST GA_G_QUIT=8
  49. /*=============================
  50.  = Gadgets labels of xref
  51.  =============================*/
  52. DEF g_xreflist
  53. DEF g_loadxref
  54. DEF g_expungexref
  55. DEF g_fonctionlist
  56. DEF g_file
  57. DEF g_viewguide
  58. DEF g_viewremember
  59. DEF g_remember
  60. DEF g_quit
  61. /**/
  62. /*"App definitions"*/
  63. DEF keyagbase=NIL
  64. DEF mylist:PTR TO lh
  65. DEF xreflist:PTR TO lh
  66. DEF rememberlist:PTR TO lh
  67. DEF currentnode=-1
  68. DEF handleag=NIL
  69. DEF agsig=-1
  70. DEF myag:PTR TO newamigaguide
  71. DEF defaultdir[256]:STRING
  72. DEF context[20]:LIST
  73. DEF text_include[256]:STRING
  74. DEF xref_file[256]:STRING
  75. DEF docguide[256]:STRING
  76. DEF psn[80]:STRING
  77. DEF baselock,popup=FALSE
  78. /**/
  79. /*"Pmodules"*/
  80. PMODULE 'CxXrefList'
  81. PMODULE 'CxXrefCX'
  82. PMODULE 'Pmodules:PMHeader'
  83. PMODULE 'PModules:dWriteF'
  84. /**/
  85. /*"p_OpenLibraries()"*/
  86. PROC p_OpenLibraries() HANDLE 
  87.     dWriteF(['p_OpenLibraries\n'],0)
  88.     IF (intuitionbase:=OpenLibrary('intuition.library',37))=NIL THEN Raise(ER_INTUITIONLIB)
  89.     IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=NIL THEN Raise(ER_GADTOOLSLIB)
  90.     IF (gfxbase:=OpenLibrary('graphics.library',37))=NIL THEN Raise(ER_GRAPHICSLIB)
  91.     IF (amigaguidebase:=OpenLibrary('amigaguide.library',34))=NIL THEN Raise(ER_AMIGAGUIDELIB)
  92.     IF (reqtoolsbase:=OpenLibrary('reqtools.library',37))=NIL THEN Raise(ER_REQTOOLSLIB)
  93.     IF (iconbase:=OpenLibrary('icon.library',37))=NIL THEN Raise(ER_ICONLIB)
  94.     IF (cxbase:=OpenLibrary('commodities.library',37))=NIL THEN Raise(ER_COMMODITIESLIB)
  95.     Raise(ER_NONE)
  96. EXCEPT
  97.     RETURN exception
  98. ENDPROC
  99. /**/
  100. /*"p_CloseLibraries()"*/
  101. PROC p_CloseLibraries()  
  102.     dWriteF(['p_CloseLibraries()\n'],0)
  103.     IF cxbase THEN CloseLibrary(cxbase)
  104.     IF iconbase THEN CloseLibrary(iconbase)
  105.     IF reqtoolsbase THEN CloseLibrary(reqtoolsbase)
  106.     IF amigaguidebase THEN CloseLibrary(amigaguidebase)
  107.     IF gfxbase THEN CloseLibrary(gfxbase)
  108.     IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
  109.     IF intuitionbase THEN CloseLibrary(intuitionbase)
  110. ENDPROC
  111. /**/
  112. /*"p_SetUpScreen()"*/
  113. PROC p_SetUpScreen() HANDLE 
  114.     dWriteF(['p_SetUpScreen()\n'],0)
  115.     IF psn=NIL
  116.         IF (screen:=LockPubScreen(p_LockActivePubScreen()))=NIL THEN Raise(ER_LOCKSCREEN)
  117.     ELSE
  118.         IF (screen:=LockPubScreen(psn))=NIL
  119.             IF (screen:=LockPubScreen(p_LockActivePubScreen()))=NIL THEN Raise(ER_LOCKSCREEN)
  120.         ENDIF
  121.     ENDIF
  122.     IF (visual:=GetVisualInfoA(screen,NIL))=NIL THEN Raise(ER_VISUAL)
  123.     offy:=screen.wbortop+Int(screen.rastport+58)-10
  124.     Raise(ER_NONE)
  125. EXCEPT
  126.     RETURN exception
  127. ENDPROC
  128. /**/
  129. /*"p_SetDownScreen()"*/
  130. PROC p_SetDownScreen() 
  131.     dWriteF(['p_SetDownScreen()\n'],0)
  132.     IF visual THEN FreeVisualInfo(visual)
  133.     IF screen THEN UnlockPubScreen(NIL,screen)
  134. ENDPROC
  135. /**/
  136. /*"p_LockActivePubScreen()"*/
  137. PROC p_LockActivePubScreen()
  138.     DEF ps:PTR TO pubscreennode
  139.     DEF s:PTR TO screen
  140.     DEF sn:PTR TO ln
  141.     DEF psl:PTR TO lh
  142.     DEF ret=NIL
  143.     DEF myintui:PTR TO intuitionbase
  144.     dWriteF(['p_LockActivePubScreen()\n'],0)
  145.     myintui:=intuitionbase
  146.     s:=myintui.activescreen
  147.     IF psl:=LockPubScreenList()
  148.         sn:=psl.head
  149.         WHILE sn
  150.             ps:=sn
  151.             IF sn.succ<>0
  152.                 IF ps.screen=s THEN ret:=sn.name
  153.             ENDIF
  154.             sn:=sn.succ
  155.         ENDWHILE
  156.         UnlockPubScreenList()
  157.     ENDIF
  158.     RETURN ret
  159. ENDPROC
  160. /**/
  161.  
  162. /*"p_InitxrefWindow()"*/
  163. PROC p_InitxrefWindow() HANDLE 
  164.     DEF g:PTR TO gadget
  165.     dWriteF(['p_InitxrefWindow()\n'],0)
  166.     IF (g:=CreateContext({xref_glist}))=NIL THEN Raise(ER_CONTEXT)
  167.     IF (g_xreflist:=CreateGadgetA(LISTVIEW_KIND,g,[offx+36,offy+18,197,32,'XRef File(s).',tattr,0,2,visual,0]:newgadget,[GTLV_READONLY,TRUE,GTLV_LABELS,NIL,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  168.     IF (g_loadxref:=CreateGadgetA(BUTTON_KIND,g_xreflist,[offx+364,offy+18,101,11,'Load Xref',tattr,1,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  169.     IF (g_expungexref:=CreateGadgetA(BUTTON_KIND,g_loadxref,[offx+364,offy+35,101,11,'ExpungeXRef',tattr,2,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  170.     IF (g_fonctionlist:=CreateGadgetA(LISTVIEW_KIND,g_expungexref,[offx+36,offy+71,197,40,'Fonctions List.',tattr,3,4,visual,0]:newgadget,[GTLV_SHOWSELECTED,NIL,GTLV_LABELS,NIL,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  171.     IF (g_file:=CreateGadgetA(TEXT_KIND,g_fonctionlist,[offx+288,offy+71,177,11,'File',tattr,4,1,visual,0]:newgadget,[GTTX_BORDER,1,GTTX_TEXT,'',GTTX_COPYTEXT,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  172.     IF (g_viewguide:=CreateGadgetA(BUTTON_KIND,g_file,[offx+244,offy+83,101,11,'View Guide',tattr,5,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  173.     IF (g_viewremember:=CreateGadgetA(BUTTON_KIND,g_viewguide,[offx+364,offy+83,101,11,'V Remember',tattr,6,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  174.     IF (g_remember:=CreateGadgetA(BUTTON_KIND,g_viewremember,[offx+244,offy+96,101,11,'Remember',tattr,7,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  175.     IF (g_quit:=CreateGadgetA(BUTTON_KIND,g_remember,[offx+364,offy+96,101,11,'Quit',tattr,8,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  176.     Raise(ER_NONE)
  177. EXCEPT
  178.     RETURN exception
  179. ENDPROC
  180. /**/
  181. /*"p_RenderxrefWindow()"*/
  182. PROC p_RenderxrefWindow() 
  183.     dWriteF(['p_RenderxrefWindow()\n'],0)
  184.     IF currentnode<>-1 THEN p_UpDateFileGadget(currentnode) ELSE Gt_SetGadgetAttrsA(g_file,xref_window,NIL,[GTTX_TEXT,'None.',TAG_DONE])
  185.     IF (p_EmptyList(mylist)<>-1)
  186.         Gt_SetGadgetAttrsA(g_fonctionlist,xref_window,NIL,[GA_DISABLED,FALSE,GTLV_SHOWSELECTED,0,GTLV_LABELS,mylist,TAG_DONE])
  187.     ELSE
  188.         Gt_SetGadgetAttrsA(g_fonctionlist,xref_window,NIL,[GA_DISABLED,FALSE,GTLV_SHOWSELECTED,NIL,GTLV_LABELS,NIL,TAG_DONE])
  189.     ENDIF
  190.     IF (p_EmptyList(xreflist)<>-1)
  191.         Gt_SetGadgetAttrsA(g_xreflist,xref_window,NIL,[GA_DISABLED,FALSE,GTLV_SHOWSELECTED,0,GTLV_LABELS,xreflist,TAG_DONE])
  192.     ELSE
  193.         Gt_SetGadgetAttrsA(g_xreflist,xref_window,NIL,[GA_DISABLED,FALSE,GTLV_SHOWSELECTED,NIL,GTLV_LABELS,NIL,TAG_DONE])
  194.     ENDIF
  195.     DrawBevelBoxA(xref_window.rport,offx+10,offy+12,463,42,[GT_VISUALINFO,visual,TAG_DONE,0])
  196.     DrawBevelBoxA(xref_window.rport,offx+12,offy+55,460,56,[GT_VISUALINFO,visual,TAG_DONE,0])
  197.     RefreshGList(g_xreflist,xref_window,NIL,-1)
  198.     Gt_RefreshWindow(xref_window,NIL)
  199. ENDPROC
  200. /**/
  201. /*"p_UpDateFileGadget(num)"*/
  202. PROC p_UpDateFileGadget(num)
  203.     DEF xn:PTR TO xref
  204.     dWriteF(['p_UpDateFileGadget()\n'],0)
  205.     xn:=p_GetAdrNode(mylist,num)
  206.     Gt_SetGadgetAttrsA(g_file,xref_window,NIL,[GTTX_TEXT,xn.file,TAG_DONE])
  207. ENDPROC
  208. /**/
  209. /*"p_OpenxrefWindow()"*/
  210. PROC p_OpenxrefWindow() HANDLE
  211.     dWriteF(['p_OpenxrefWindow()\n'],0)
  212.     IF (xref_window:=OpenWindowTagList(NIL,
  213.                       [WA_LEFT,screen.mousex-240,
  214.                        WA_TOP,screen.mousey-57,
  215.                        WA_WIDTH,offx+481,
  216.                        WA_HEIGHT,offy+114,
  217.                        WA_IDCMP,$278+IDCMP_REFRESHWINDOW+IDCMP_MENUHELP+IDCMP_RAWKEY,
  218.                        WA_FLAGS,$102E+WFLG_HASZOOM,
  219.                        WA_ZOOM,[0,0,offy+290,11]:INT,
  220.                        WA_GADGETS,xref_glist,
  221.                        WA_CUSTOMSCREEN,screen,
  222.                        WA_TITLE,title_req,
  223.                        WA_SCREENTITLE,'Made With GadToolsBox V2.0b © 1991-1993',
  224.                        TAG_DONE]))=NIL THEN Raise(ER_WINDOW)
  225.     p_RenderxrefWindow()
  226.     Raise(ER_NONE)
  227. EXCEPT
  228.     RETURN exception
  229. ENDPROC
  230. /**/
  231. /*"p_RemxrefWindow()"*/
  232. PROC p_RemxrefWindow() 
  233.     dWriteF(['p_RemxrefWindow()\n'],0)
  234.     IF xref_window THEN CloseWindow(xref_window)
  235.     IF xref_glist THEN FreeGadgets(xref_glist)
  236.     xref_window:=NIL
  237. ENDPROC
  238. /**/
  239. /*"p_OpenWindow()"*/
  240. PROC p_OpenWindow() HANDLE 
  241. /*===============================================================================
  242.  = Para         : NONE
  243.  = Return       : ER_NONE if ok,else the error.
  244.  = Description  : Lock,init gagets lists and open whatview window.
  245.  ==============================================================================*/
  246.     DEF t
  247.     dWriteF(['p_OpenWindow()\n'],[0])
  248.     IF (t:=p_SetUpScreen())<>ER_NONE THEN Raise(t)
  249.     IF (t:=p_InitxrefWindow())<>ER_NONE THEN Raise(t)
  250.     IF (t:=p_OpenxrefWindow())<>ER_NONE THEN Raise(t)
  251.     Raise(ER_NONE)
  252. EXCEPT
  253.     RETURN exception
  254. ENDPROC
  255. /**/
  256. /*"p_CloseWindow()"*/
  257. PROC p_CloseWindow() 
  258. /*===============================================================================
  259.  = Para         : NONE
  260.  = Return       : NONE
  261.  = Description  : free gadgets lists,close window and unlock screen.
  262.  ==============================================================================*/
  263.     dWriteF(['p_CloseWindow()\n'],[0])
  264.     IF xref_window THEN p_RemxrefWindow()
  265.     IF screen THEN p_SetDownScreen()
  266.     screen:=NIL
  267.     xref_window:=NIL
  268. ENDPROC
  269. /**/
  270.  
  271. /*"p_LookAllMessage()"*/
  272. PROC p_LookAllMessage() 
  273.     DEF sigreturn
  274.     DEF xrefport:PTR TO mp
  275.     IF xref_window THEN xrefport:=xref_window.userport ELSE xrefport:=NIL
  276.     sigreturn:=Wait(Shl(1,xrefport.sigbit) OR 
  277.                     agsig OR 
  278.                     cxsigflag OR
  279.                     $F000)
  280.     IF (sigreturn AND Shl(1,xrefport.sigbit))
  281.         IF p_LookxrefMessage()=TRUE THEN p_CloseWindow()
  282.     ENDIF
  283.     IF (sigreturn AND agsig)
  284.         p_LookAmigaGuideMessage()
  285.     ENDIF
  286.     IF (sigreturn AND cxsigflag)
  287.         p_LookCxMessage()
  288.     ENDIF
  289.     IF (sigreturn AND $F000)
  290.         reelquit:=TRUE
  291.     ENDIF
  292. ENDPROC
  293. /**/
  294. /*"p_LookxrefMessage()"*/
  295. PROC p_LookxrefMessage() 
  296.    DEF mes:PTR TO intuimessage
  297.    DEF g:PTR TO gadget
  298.    DEF type=0,infos=NIL
  299.    DEF ret=FALSE
  300.    WHILE mes:=Gt_GetIMsg(xref_window.userport)
  301.        type:=mes.class
  302.        /*WriteF('\h\n',type)*/
  303.        SELECT type
  304.            CASE IDCMP_REFRESHWINDOW
  305.               p_RenderxrefWindow()
  306.            CASE IDCMP_MENUPICK
  307.               infos:=mes.code
  308.               SELECT infos
  309.               ENDSELECT
  310.            CASE IDCMP_CLOSEWINDOW
  311.               ret:=TRUE
  312.            CASE IDCMP_GADGETUP
  313.               g:=mes.iaddress
  314.               infos:=g.gadgetid
  315.               SELECT infos
  316.                   CASE GA_G_XREFLIST
  317.                   CASE GA_G_LOADXREF
  318.                     IF (p_FileRequester())=TRUE THEN p_RenderxrefWindow()
  319.                   CASE GA_G_EXPUNGEXREF
  320.                     Gt_SetGadgetAttrsA(g_file,xref_window,NIL,[GTTX_TEXT,'Clear Xref..',TAG_DONE])
  321.                     ExpungeXRef()
  322.                     currentnode:=-1
  323.                     p_UpDateListes()
  324.                     xreflist:=p_CleanList(xreflist,FALSE,0,LIST_CLEAN)
  325.                     p_RenderxrefWindow()
  326.                   CASE GA_G_FONCTIONLIST
  327.                     currentnode:=mes.code
  328.                     p_UpDateFileGadget(currentnode)
  329.                   CASE GA_G_FILE
  330.                   CASE GA_G_VIEWGUIDE
  331.                     p_ShowAmigaGuideFile(currentnode)
  332.                   CASE GA_G_VIEWREMEMBER
  333.                     p_ViewRememberGuide()
  334.                   CASE GA_G_REMEMBER
  335.                     p_AddToRememberList(currentnode)
  336.                   CASE GA_G_QUIT
  337.                     reelquit:=TRUE
  338.               ENDSELECT
  339.            CASE IDCMP_RAWKEY
  340.               IF mes.code=95 THEN p_CheckMousePosition()
  341.        ENDSELECT
  342.        Gt_ReplyIMsg(mes)
  343.    ENDWHILE
  344.    RETURN ret
  345. ENDPROC
  346. /**/
  347. /*"p_LookCxMessage()"*/
  348. PROC p_LookCxMessage() 
  349.     DEF msgid=NIL,msgtype=NIL
  350.     DEF msg
  351.     WHILE msg:=GetMsg(broker_mp) 
  352.         msgid:=CxMsgID(msg)
  353.         msgtype:=CxMsgType(msg) 
  354.         SELECT msgtype 
  355.             CASE CXM_IEVENT 
  356.                 SELECT msgid 
  357.                     CASE EVT_HOTKEY_CXREF
  358.                         IF xref_window=NIL
  359.                             p_OpenWindow() 
  360.                         ELSE
  361.                             p_CloseWindow() 
  362.                         ENDIF 
  363.                     CASE EVT_HOTKEY_GUIDE;  p_ShowAmigaGuideFile(currentnode)
  364.                 ENDSELECT 
  365.             CASE CXM_COMMAND 
  366.                 SELECT msgid
  367.                     CASE CXCMD_KILL 
  368.                         reelquit:=TRUE
  369.                     CASE  CXCMD_DISABLE 
  370.                         ActivateCxObj(broker,0) 
  371.                     CASE CXCMD_ENABLE
  372.                         ActivateCxObj(broker,1) 
  373.                     CASE CXCMD_APPEAR 
  374.                         IF xref_window=NIL
  375.                             p_OpenWindow() 
  376.                         ELSE 
  377.                             WindowToFront(xref_window)
  378.                         ENDIF 
  379.                     CASE CXCMD_DISAPPEAR 
  380.                         IF xref_window<>NIL
  381.                             p_CloseWindow() 
  382.                         ENDIF 
  383.                 ENDSELECT
  384.         ENDSELECT
  385.         ReplyMsg(msg)
  386.     ENDWHILE
  387. ENDPROC
  388. /**/
  389.  
  390. /*"p_AddToRememberList(numnode)"*/
  391. PROC p_AddToRememberList(numnode)
  392.     DEF n:PTR TO ln
  393.     DEF xn:PTR TO xref
  394.     DEF cmd[256]:STRING
  395.     n:=p_GetAdrNode(mylist,numnode)
  396.     xn:=n
  397.     IF n.type=1
  398.         StringF(cmd,'   @{"\s" link "\s/\s"}',n.name,xn.file,xn.name)
  399.         IF FindName(rememberlist,cmd)=0
  400.             p_AjouteNode(rememberlist,cmd,0)
  401.         ELSE
  402.             p_Request('\s est déjà dans Remember.Guide','Merci',[xn.name])
  403.         ENDIF
  404.     ELSE
  405.         StringF(cmd,'    @{"\s" link "\s/Main" \d \d}',n.name,xn.file,xn.line,n.type)
  406.         IF FindName(rememberlist,cmd)=0
  407.             p_AjouteNode(rememberlist,cmd,0)
  408.         ELSE
  409.             p_Request('\s est déjà dans Remember.Guide','Merci',[xn.name])
  410.         ENDIF
  411.     ENDIF
  412. ENDPROC
  413. /**/
  414. /*"p_ViewRememberGuide()"*/
  415. PROC p_ViewRememberGuide()
  416.     DEF h
  417.     DEF oldstdout
  418.     DEF n:PTR TO ln
  419.     IF p_EmptyList(rememberlist)<>-1
  420.         oldstdout:=stdout
  421.         IF h:=Open('T:Remember.Guide',1006)
  422.             stdout:=h
  423.             WriteF('@database "CxXref Remember.Guide"\n')
  424.             WriteF('@node main "Remember List"\n')
  425.             n:=rememberlist.head
  426.             WHILE n
  427.                 IF n.succ<>0
  428.                     WriteF('\s\n',n.name)
  429.                 ENDIF
  430.                 n:=n.succ
  431.             ENDWHILE
  432.             WriteF('@endnode\n')
  433.             IF h THEN Close(h)
  434.         ELSE
  435.             p_Request('Vous devez sortir du Document en cours.','D\aAccord',0)
  436.             JUMP skk
  437.         ENDIF
  438.         stdout:=oldstdout
  439.         myag.name:='T:Remember.guide'
  440.         myag.node:='main'
  441.         myag.line:=0
  442.         myag.context:=0
  443.         SendAmigaGuideCmd(handleag,'Link "T:Remember.guide/main"',NIL)
  444.     ELSE
  445.         p_Request('Le fichier T:Remember.guide ne contient aucun noeud','Merci',0)
  446.     ENDIF
  447.     skk:
  448. ENDPROC
  449. /**/
  450. /*"p_LookAmigaGuideMessage()"*/
  451. PROC p_LookAmigaGuideMessage()
  452.     DEF agmsg:PTR TO amigaguidemsg
  453.     DEF type
  454.     WHILE (agmsg:=GetAmigaGuideMsg(handleag))
  455.         type:=agmsg.type
  456.         /*WriteF('Type :\h Pri_Ret:\h\n',type,agmsg.pri_ret)*/
  457.         ReplyAmigaGuideMsg(agmsg)
  458.     ENDWHILE
  459. ENDPROC
  460. /**/
  461. /*"p_CheckMousePosition()"*/
  462. PROC p_CheckMousePosition()
  463.     DEF myg:PTR TO gadget
  464.     DEF mx=-1,my=-1
  465.     DEF minx,maxx,miny,maxy
  466.     DEF id
  467.     DEF cmd[256]:STRING
  468.     DEF test,found=FALSE
  469.     mx:=xref_window.mousex
  470.     my:=xref_window.mousey
  471.     myg:=g_xreflist
  472.     REPEAT
  473.         minx:=myg.leftedge
  474.         maxx:=myg.leftedge+myg.width
  475.         miny:=myg.topedge
  476.         maxy:=myg.topedge+myg.height
  477.         /*WriteF('Mx :\d My :\d \d \d \d \d\n',mx,my,minx,maxx,miny,maxy)*/
  478.         IF ((mx<maxx) AND (mx>minx))
  479.             IF ((my<maxy) AND (my>miny))
  480.                 id:=myg.gadgetid
  481.                 myag.name:=docguide
  482.                 myag.node:='main'
  483.                 myag.line:=0
  484.                 myag.context:=context
  485.                 StringF(cmd,'link "\s/\s"',docguide,context[id])
  486.                 test:=SendAmigaGuideCmd(handleag,cmd,NIL)
  487.                 found:=TRUE
  488.                 /*WriteF('\s \d\n',cmd,test)*/
  489.             ENDIF
  490.         ENDIF
  491.         myg:=myg.nextgadget
  492.     UNTIL myg=NIL
  493.     IF found=FALSE
  494.         StringF(cmd,'link "\s/\s"',docguide,'COPY')
  495.         test:=SendAmigaGuideCmd(handleag,cmd,NIL)
  496.         /*WriteF('\s \d\n',cmd,test)*/
  497.     ENDIF
  498. ENDPROC
  499. /**/
  500. /*"p_InitAPP()"*/
  501. PROC p_InitAPP() HANDLE
  502.     DEF flist:PTR TO lh
  503.     dWriteF(['p_InitAPP()\n'],0)
  504.     StrCopy(defaultdir,'Ram:',ALL)
  505.     IF EstrLen(text_include)<>0 THEN AssignPath('TEXT_INCLUDE',text_include)
  506.     IF EstrLen(xref_file)<>0 THEN StrCopy(defaultdir,xref_file,ALL)
  507.     IF (keyagbase:=LockAmigaGuideBase(NIL))=NIL THEN Raise(ER_LOCKAG)
  508.     mylist:=p_InitList()
  509.     xreflist:=p_InitList()
  510.     rememberlist:=p_InitList()
  511.     GetAmigaGuideAttr(AGA_XREFLIST,NIL,flist)
  512.     IF (myag:=New(SIZEOF newamigaguide))=NIL THEN Raise(ER_NEWAG)
  513.     myag.basename:='CxXRef'
  514.     myag.name:=docguide
  515.     myag.node:='Main'
  516.     myag.line:=0
  517.     myag.flags:=HTF_CACHE_NODE+HTF_UNIQUE
  518.     context:=['XREFLIST','LOADXREF','EXPUNGEXREF','FONCTIONLIST','FILE','VIEWGUIDE','VIEWREMEMBER','REMEMBER','QUIT',NIL]
  519.     myag.context:=context
  520.     IF (handleag:=OpenAmigaGuideAsync(myag,NIL))=NIL THEN Raise(ER_HANDLEAG)
  521.     agsig:=AmigaGuideSignal(handleag)
  522.     SetAmigaGuideAttrsA(handleag,[AGA_ACTIVATE,TRUE,NIL])
  523.     mylist:=Long(flist)
  524.     UnlockAmigaGuideBase(keyagbase)
  525.     keyagbase:=NIL
  526.     Raise(ER_NONE)
  527. EXCEPT
  528.     RETURN exception
  529. ENDPROC
  530. /**/
  531. /*"p_RemAPP()"*/
  532. PROC p_RemAPP()
  533.     /*IF keyagbase<>NIL THEN UnlockAmigaGuideBase(keyagbase)*/
  534.     dWriteF(['p_RemAPP()\n'],0)
  535.     IF handleag<>NIL THEN CloseAmigaGuide(handleag)
  536.     DeleteFile('T:Remember.Guide')
  537.     DeleteFile('T:Data.Guide')
  538. ENDPROC
  539. /**/
  540. /*"p_StartCLI()"*/
  541. PROC p_StartCLI() HANDLE
  542.     DEF myargs:PTR TO LONG,rdargs=NIL
  543.     myargs:=[0,0,0,0,0,0,0,0]
  544.     IF rdargs:=ReadArgs('XR=XREF_FILE/K,TI=TEXT_INCLUDE/K,GUIDE/K,PUBSCREEN/K,HT=CX_POPKEY/K,P=CX_PRIORITY/N,HG=CX_HOTKEYGUIDE/K,CX_POPUP/S',myargs,NIL)
  545.         IF myargs[0] THEN StrCopy(xref_file,myargs[0],ALL) ELSE StrCopy(xref_file,'Guide:',ALL)
  546.         IF myargs[1] THEN StrCopy(text_include,myargs[1],ALL) ELSE StrCopy(text_include,'LC:/Compiler_headers',ALL)
  547.         IF myargs[2] THEN StrCopy(docguide,myargs[2],ALL) ELSE StrCopy(docguide,'CxXref.Guide',ALL)
  548.         IF myargs[3] THEN StrCopy(psn,myargs[3],ALL) ELSE StrCopy(psn,'',ALL)
  549.         IF myargs[4] THEN StrCopy(hotkey,myargs[4],ALL) ELSE StrCopy(hotkey,'lcommand esc',ALL)
  550.         IF myargs[5] THEN cxpri:=Long(myargs[5]) ELSE cxpri:=0
  551.         IF myargs[6] THEN StrCopy(hotkeyguide,myargs[6],ALL) ELSE StrCopy(hotkeyguide,'lalt esc',ALL)
  552.         IF myargs[7] THEN popup:=TRUE
  553.     ELSE
  554.         Raise(ER_BADARGS)
  555.     ENDIF
  556.     Raise(ER_NONE)
  557. EXCEPT
  558.     IF rdargs THEN FreeArgs(rdargs)
  559.     RETURN exception
  560. ENDPROC
  561. /**/
  562. /*"p_StartWB()"*/
  563. PROC p_StartWB() HANDLE
  564.     DEF name[256]:STRING
  565.     DEF wb:PTR TO wbstartup
  566.     DEF args:PTR TO wbarg
  567.     DEF dob:PTR TO diskobject
  568.     DEF data[256]:STRING
  569.     dob:=NIL
  570.     wb:=wbmessage
  571.     args:=wb.arglist
  572.     StrCopy(name,args[0].name,ALL)
  573.     baselock:=CurrentDir(args[0].lock)
  574.     IF (dob:=GetDiskObject(name))
  575.         IF data:=FindToolType(dob.tooltypes,'CX_POPKEY')
  576.             StrCopy(hotkey,data,ALL)
  577.         ELSE
  578.             StrCopy(hotkey,'lcommand esc',ALL)
  579.         ENDIF
  580.         IF data:=FindToolType(dob.tooltypes,'CX_PRIORITY')
  581.             cxpri:=Val(data,NIL)
  582.         ELSE
  583.             cxpri:=0
  584.         ENDIF
  585.         IF data:=FindToolType(dob.tooltypes,'CX_POPUP') THEN popup:=TRUE
  586.         IF data:=FindToolType(dob.tooltypes,'CX_POPKEYGUIDE')
  587.             StrCopy(hotkeyguide,data,ALL)
  588.         ELSE
  589.             StrCopy(hotkeyguide,'lalt esc',ALL)
  590.         ENDIF
  591.         IF data:=FindToolType(dob.tooltypes,'TEXT_INCLUDE')
  592.             StrCopy(text_include,data,ALL)
  593.         ELSE
  594.             StrCopy(text_include,'LC:/Complier_headers',ALL)
  595.         ENDIF
  596.         IF data:=FindToolType(dob.tooltypes,'XREF_FILE')
  597.             StrCopy(xref_file,data,ALL)
  598.         ELSE
  599.             StrCopy(xref_file,'Guide:',ALL)
  600.         ENDIF
  601.         IF data:=FindToolType(dob.tooltypes,'GUIDE')
  602.             StrCopy(docguide,data,ALL)
  603.         ELSE
  604.             StrCopy(docguide,'CxXRef.guide',ALL)
  605.         ENDIF
  606.         IF data:=FindToolType(dob.tooltypes,'PUBSCREEN')
  607.             StrCopy(psn,data,ALL)
  608.         ELSE
  609.             StrCopy(psn,'',ALL)
  610.         ENDIF
  611.     ELSE
  612.         Raise(ER_NOICON)
  613.     ENDIF
  614.     Raise(ER_NONE)
  615. EXCEPT
  616.     IF dob<>NIL THEN FreeDiskObject(dob)
  617.     IF baselock THEN CurrentDir(baselock)
  618.     RETURN exception
  619. ENDPROC
  620. /**/
  621. /*"p_Request(bodytext,gadgettext,the_arg)"*/
  622. PROC p_Request(bodytext,gadgettext,the_arg)
  623. /*===============================================================================
  624.  = Para         : texte (STRING),gadgets (STRING),the_arg.
  625.  = Return       : FALSE if cancel selected,else TRUE.
  626.  = Description  : PopUp a requester (reqtools.library).
  627.  ==============================================================================*/
  628.     DEF ret
  629.     DEF taglist
  630.     IF xref_window<>NIL
  631.         taglist:=[RT_WINDOW,xref_window,RT_LOCKWINDOW,TRUE,RTEZ_REQTITLE,'CxXRef',RT_UNDERSCORE,"_",0]
  632.     ELSE
  633.         taglist:=[RTEZ_REQTITLE,'CxXRef',RT_UNDERSCORE,"_",0]
  634.     ENDIF
  635.     ret:=RtEZRequestA(bodytext,gadgettext,0,the_arg,taglist)
  636.     RETURN ret
  637. ENDPROC
  638. /**/
  639. /*"p_FileRequester()"*/
  640. PROC p_FileRequester()
  641. /*===============================================================================
  642.  = Para         : NONE
  643.  = Return       : False if cancel selected.
  644.  = Description  : PopUp a MultiFileRequester,build the cxxref arguments.
  645.  ==============================================================================*/
  646.     DEF reqfile:PTR TO rtfilerequester
  647.     DEF liste:PTR TO rtfilelist
  648.     DEF buffer[120]:STRING
  649.     DEF add_liste=0
  650.     DEF ret=FALSE
  651.     DEF the_reelname[256]:STRING
  652.     DEF fullname[256]:STRING
  653.     DEF pv[256]:STRING
  654.     DEF test
  655.     reqfile:=NIL
  656.     IF reqfile:=RtAllocRequestA(RT_FILEREQ,NIL)
  657.         buffer[0]:=0
  658.         RtChangeReqAttrA(reqfile,[RTFI_DIR,defaultdir,TAG_DONE])
  659.         add_liste:=RtFileRequestA(reqfile,buffer,'CxXRef: Load Xref',
  660.                                   [RTFI_FLAGS,FREQF_MULTISELECT,RTFI_OKTEXT,'Load',RTFI_HEIGHT,200,
  661.                                    RT_UNDERSCORE,"_",TAG_DONE])
  662.         StrCopy(defaultdir,reqfile.dir,ALL)
  663.         StrCopy(pv,reqfile.dir,ALL)
  664.         AddPart(pv,'',256)
  665.         IF reqfile THEN RtFreeRequest(reqfile)
  666.         IF add_liste THEN ret:=TRUE
  667.     ELSE
  668.         ret:=FALSE
  669.     ENDIF
  670.     IF ret=TRUE
  671.         liste:=add_liste
  672.         IF add_liste
  673.             Gt_SetGadgetAttrsA(g_file,xref_window,NIL,[GTTX_TEXT,'Wait Loading Xref..',TAG_DONE])
  674.             WHILE liste
  675.                 StringF(the_reelname,'\s',liste.name)
  676.                 StringF(fullname,'\s\s',pv,the_reelname)
  677.                 test:=LoadXRef(NIL,fullname)
  678.                 SELECT test
  679.                     CASE -1; NOP
  680.                     CASE  0; p_Request('Impossible de charger \s','Ok',[the_reelname])
  681.                     CASE  1
  682.                         p_AjouteNode(xreflist,the_reelname,0)
  683.                         p_UpDateListes()
  684.                     CASE 2 ; p_Request('\s est déjà chargé','Merci',[the_reelname])
  685.                 ENDSELECT
  686.                 liste:=liste.next
  687.             ENDWHILE
  688.             IF add_liste THEN RtFreeFileList(add_liste)
  689.         ENDIF
  690.     ELSE
  691.         ret:=FALSE
  692.     ENDIF
  693.     RETURN ret
  694. ENDPROC
  695. /**/
  696. /*"p_UpDateListes()"*/
  697. PROC p_UpDateListes()
  698.     DEF flist
  699.     GetAmigaGuideAttr(AGA_XREFLIST,NIL,flist)
  700.     mylist:=Long(flist)
  701. ENDPROC
  702. /**/
  703. /*"p_ShowAmigaGuideFile(numnode)"*/
  704. PROC p_ShowAmigaGuideFile(numnode)
  705.     DEF n:PTR TO ln
  706.     DEF xn:PTR TO xref
  707.     DEF cmd[256]:STRING
  708.     IF numnode=-1 THEN RETURN
  709.     n:=p_GetAdrNode(mylist,numnode)
  710.     xn:=n
  711.     IF n.type=1
  712.         StringF(cmd,'link "\s"',xn.name)
  713.         myag.name:=xn.file
  714.         myag.node:=xn.name
  715.         myag.line:=xn.line
  716.         myag.context:=0
  717.         SendAmigaGuideCmd(handleag,cmd,NIL)
  718.     ELSE
  719.         IF p_WriteAmigaGuide(xn.file,xn.name,xn.line,n.type)=TRUE
  720.             StrCopy(cmd,'link "T:Data.Guide/Structure Info"',ALL)
  721.             myag.name:='T:data.guide'
  722.             myag.node:='Structure Info'
  723.             myag.line:=xn.line
  724.             myag.context:=0
  725.             SendAmigaGuideCmd(handleag,cmd,NIL)
  726.         ENDIF
  727.     ENDIF
  728. ENDPROC
  729. /**/
  730. /*"p_WriteAmigaGuide(fichier,nom,ligne,type)"*/
  731. PROC p_WriteAmigaGuide(fichier,nom,ligne,type)
  732.     DEF h,ret=TRUE
  733.     DEF oldstdout
  734.     /*
  735.     DEF cmd[256]:STRING
  736.     StringF(cmd,'hd3:Amiga_e_v3.0a/bin/showmodule >T:\s \s',nom,fichier)
  737.     WriteF('\s\n',cmd)
  738.     Execute(cmd,0,stdout)
  739.     StringF(cmd,'T:\s',nom)
  740.     fichier:=cmd
  741.     */
  742.     oldstdout:=stdout
  743.     IF h:=Open('T:Data.Guide',1006)
  744.         stdout:=h
  745.         WriteF('@database "CxXRefv0.0"\n')
  746.         WriteF('@node main\n')
  747.         WriteF('@endnode\n')
  748.         WriteF('@node "Structure Info"\n\n')
  749.         WriteF('    @{"\s" link "\s/Main" \d \d}\n',nom,fichier,ligne,type)
  750.         WriteF('@endnode\n')
  751.         Close(h)
  752.     ELSE
  753.         p_Request('Vous devez sortir du Document en cours.','D\aAccord',0)
  754.         ret:=FALSE
  755.     ENDIF
  756.     stdout:=oldstdout
  757.     RETURN ret
  758. ENDPROC
  759. /**/
  760. /*"main()"*/
  761. PROC main() HANDLE 
  762.     DEF testmain
  763.     tattr:=['topaz.font',8,0,0]:textattr
  764.     IF (testmain:=p_OpenLibraries())<>ER_NONE THEN Raise(testmain)
  765.     p_DoReadHeader({banner})
  766.     IF wbmessage<>NIL
  767.         IF (testmain:=p_StartWB())<>ER_NONE THEN Raise(testmain)
  768.     ELSE
  769.         IF (testmain:=p_StartCLI())<>ER_NONE THEN Raise(testmain)
  770.     ENDIF
  771.     IF (testmain:=p_InitCx())<>ER_NONE THEN Raise(testmain)
  772.     IF (testmain:=p_InitAPP())<>ER_NONE THEN Raise(testmain)
  773.     IF popup=TRUE THEN p_OpenWindow()
  774.     REPEAT
  775.         p_LookAllMessage()
  776.     UNTIL reelquit=TRUE
  777.     Raise(ER_NONE)
  778. EXCEPT
  779.     IF xref_window<>NIL THEN p_RemxrefWindow()
  780.     IF screen<>NIL THEN p_SetDownScreen()
  781.     p_RemAPP()
  782.     p_RemCx()
  783.     p_CloseLibraries()
  784.     SELECT exception
  785.         CASE ER_LOCKSCREEN; WriteF('Lock Screen Failed.')
  786.         CASE ER_VISUAL;     WriteF('Error Visual.')
  787.         CASE ER_CONTEXT;    WriteF('Error Context.')
  788.         CASE ER_MENUS;      WriteF('Error Menus.')
  789.         CASE ER_GADGET;     WriteF('Error Gadget.')
  790.         CASE ER_WINDOW;     WriteF('Error Window.')
  791.         CASE ER_LOCKAG;     WriteF('Error Lock AmigaGuideBase.\n')
  792.         CASE ER_NEWAG;      WriteF('Error Allocate New AmigaGuide.\n')
  793.         CASE ER_HANDLEAG;   WriteF('Error Create AmigaGuideAsync.\n')
  794.         CASE ER_BADARGS;    WriteF('Error ReadArgs() fct.\n')
  795.         CASE ER_NOICON;     WriteF('Error NoIcon.\n')
  796.         CASE ER_AMIGAGUIDELIB;  WriteF('amigaguide.library ?\n')
  797.         CASE ER_REQTOOLSLIB;    WriteF('reqtools.library ?\n')
  798.         CASE ER_PORT;           WriteF('Error CreateMsgPort() for commodities.\n')
  799.         CASE ER_CX;             WriteF('Error Cx.\n')
  800.     ENDSELECT
  801. ENDPROC
  802. /**/
  803.